package org.example.framework;

import java.lang.reflect.Proxy;

/**
 * @author shenguangyang
 */
public class ProxyFactory<T> {
    @SuppressWarnings("unchecked")
    public static <T> T getProxy(final Class<?> interfaceClass) {
        return (T) Proxy.newProxyInstance(interfaceClass.getClassLoader(), new Class[]{interfaceClass}, (proxy, method, args) -> {
            // 这块可以实现的功能
            // 1. 负载均衡调用
            // 2. 服务容错
            // 3. 重试
            try {
               Invocation invocation = new Invocation(interfaceClass.getName(), method.getName(),
                       method.getParameterTypes(), args, "1");
                Invoker invoker = ClusterInvoker.join(interfaceClass);
               return invoker.invoke(invocation);
            } catch (Exception e) {
               // 可以实现服务容错, 可以配置一个类 + 方法
               return "error: " + e.getMessage();
            }
        });
    }
}
